'''
适用场景：
    1）表示对象的‘部分-整体’层次结构
    2）希望用户忽略组合对象与单个对象的不同，用户统一地使用组合结构中的所有对象

优点：
    1）定义了包含基本对象和组合对象的类层次结构
    2）简化了客户端代码，即客户端可以一致地适用组合对象和单个对象
    3）更容易增加新类型的组件
'''
from abc import ABCMeta,abstractmethod

class Graphic(metaclass=ABCMeta):
    @abstractmethod
    def draw(self):
        pass

class Point(Graphic):
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def __str__(self):
        return "点（%s,%s）"% (self.x,self.y)

    def draw(self):
        print(str(self))

class Line(Graphic):
    def __init__(self,p1:Point,p2:Point) :
        self.p1 = p1
        self.p2 = p2

    def __str__(self) -> str:
        return "线段[%s,%s]" % (self.p1,self.p2)
    def draw(self):
        print(str(self))

class Picture(Graphic):
    def __init__(self,iterable) :
        self.children = []

        for g in iterable:
            self.add(g)

    def add(self,graphic):
        self.children.append(graphic)

    def draw(self):
        print("-"* 10 + "复合图形" + '-' * 10)
        for  g in self.children:
            g.draw()
if __name__ == '__main__':
    Line(Point(1,1),Point(2,2)).draw()

